{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 第四步：调整树的参数：subsample 和 colsample_bytree\n",
    "(粗调，参数的步长为0.1；下一步是在粗调最佳参数周围，将步长降为0.05，进行精细调整)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-01-03T08:33:44.984080Z",
     "start_time": "2018-01-03T08:33:43.696100Z"
    }
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/anaconda3/lib/python3.6/site-packages/sklearn/cross_validation.py:41: DeprecationWarning: This module was deprecated in version 0.18 in favor of the model_selection module into which all the refactored classes and functions are moved. Also note that the interface of the new CV iterators are different from that of this module. This module will be removed in 0.20.\n",
      "  \"This module will be removed in 0.20.\", DeprecationWarning)\n"
     ]
    }
   ],
   "source": [
    "from xgboost import XGBClassifier\n",
    "import xgboost as xgb\n",
    "\n",
    "import pandas as pd \n",
    "import numpy as np\n",
    "\n",
    "from sklearn.model_selection import GridSearchCV\n",
    "from sklearn.model_selection import StratifiedKFold\n",
    "\n",
    "from sklearn.metrics import log_loss\n",
    "\n",
    "from matplotlib import pyplot\n",
    "import seaborn as sns\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 读取数据 & 数据探索"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-01-03T08:33:47.603174Z",
     "start_time": "2018-01-03T08:33:46.362421Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>bathrooms</th>\n",
       "      <th>bedrooms</th>\n",
       "      <th>price</th>\n",
       "      <th>price_bathrooms</th>\n",
       "      <th>price_bedrooms</th>\n",
       "      <th>room_diff</th>\n",
       "      <th>room_num</th>\n",
       "      <th>Year</th>\n",
       "      <th>Month</th>\n",
       "      <th>Day</th>\n",
       "      <th>...</th>\n",
       "      <th>walk</th>\n",
       "      <th>walls</th>\n",
       "      <th>war</th>\n",
       "      <th>washer</th>\n",
       "      <th>water</th>\n",
       "      <th>wheelchair</th>\n",
       "      <th>wifi</th>\n",
       "      <th>windows</th>\n",
       "      <th>work</th>\n",
       "      <th>interest_level</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1.5</td>\n",
       "      <td>3</td>\n",
       "      <td>3000</td>\n",
       "      <td>1200.0</td>\n",
       "      <td>750.000000</td>\n",
       "      <td>-1.5</td>\n",
       "      <td>4.5</td>\n",
       "      <td>2016</td>\n",
       "      <td>6</td>\n",
       "      <td>24</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1.0</td>\n",
       "      <td>2</td>\n",
       "      <td>5465</td>\n",
       "      <td>2732.5</td>\n",
       "      <td>1821.666667</td>\n",
       "      <td>-1.0</td>\n",
       "      <td>3.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>6</td>\n",
       "      <td>12</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1.0</td>\n",
       "      <td>1</td>\n",
       "      <td>2850</td>\n",
       "      <td>1425.0</td>\n",
       "      <td>1425.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>4</td>\n",
       "      <td>17</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1.0</td>\n",
       "      <td>1</td>\n",
       "      <td>3275</td>\n",
       "      <td>1637.5</td>\n",
       "      <td>1637.500000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>4</td>\n",
       "      <td>18</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>1.0</td>\n",
       "      <td>4</td>\n",
       "      <td>3350</td>\n",
       "      <td>1675.0</td>\n",
       "      <td>670.000000</td>\n",
       "      <td>-3.0</td>\n",
       "      <td>5.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>4</td>\n",
       "      <td>28</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 228 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "   bathrooms  bedrooms  price  price_bathrooms  price_bedrooms  room_diff  \\\n",
       "0        1.5         3   3000           1200.0      750.000000       -1.5   \n",
       "1        1.0         2   5465           2732.5     1821.666667       -1.0   \n",
       "2        1.0         1   2850           1425.0     1425.000000        0.0   \n",
       "3        1.0         1   3275           1637.5     1637.500000        0.0   \n",
       "4        1.0         4   3350           1675.0      670.000000       -3.0   \n",
       "\n",
       "   room_num  Year  Month  Day       ...        walk  walls  war  washer  \\\n",
       "0       4.5  2016      6   24       ...           0      0    0       0   \n",
       "1       3.0  2016      6   12       ...           0      0    0       0   \n",
       "2       2.0  2016      4   17       ...           0      0    0       0   \n",
       "3       2.0  2016      4   18       ...           0      0    0       0   \n",
       "4       5.0  2016      4   28       ...           0      0    1       0   \n",
       "\n",
       "   water  wheelchair  wifi  windows  work  interest_level  \n",
       "0      0           0     0        0     0               1  \n",
       "1      0           0     0        0     0               2  \n",
       "2      0           0     0        0     0               0  \n",
       "3      0           0     0        0     0               2  \n",
       "4      0           0     0        0     0               2  \n",
       "\n",
       "[5 rows x 228 columns]"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "dpath = './data/'\n",
    "data = pd.read_csv(dpath + 'RentListingInquries_FE_train.csv')\n",
    "data.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-01-03T08:33:49.457948Z",
     "start_time": "2018-01-03T08:33:47.828407Z"
    },
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>bathrooms</th>\n",
       "      <th>bedrooms</th>\n",
       "      <th>price</th>\n",
       "      <th>price_bathrooms</th>\n",
       "      <th>price_bedrooms</th>\n",
       "      <th>room_diff</th>\n",
       "      <th>room_num</th>\n",
       "      <th>Year</th>\n",
       "      <th>Month</th>\n",
       "      <th>Day</th>\n",
       "      <th>...</th>\n",
       "      <th>virtual</th>\n",
       "      <th>walk</th>\n",
       "      <th>walls</th>\n",
       "      <th>war</th>\n",
       "      <th>washer</th>\n",
       "      <th>water</th>\n",
       "      <th>wheelchair</th>\n",
       "      <th>wifi</th>\n",
       "      <th>windows</th>\n",
       "      <th>work</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1.0</td>\n",
       "      <td>1</td>\n",
       "      <td>2950</td>\n",
       "      <td>1475.000000</td>\n",
       "      <td>1475.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>6</td>\n",
       "      <td>11</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1.0</td>\n",
       "      <td>2</td>\n",
       "      <td>2850</td>\n",
       "      <td>1425.000000</td>\n",
       "      <td>950.000000</td>\n",
       "      <td>-1.0</td>\n",
       "      <td>3.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>6</td>\n",
       "      <td>24</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1.0</td>\n",
       "      <td>1</td>\n",
       "      <td>3758</td>\n",
       "      <td>1879.000000</td>\n",
       "      <td>1879.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>6</td>\n",
       "      <td>3</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1.0</td>\n",
       "      <td>2</td>\n",
       "      <td>3300</td>\n",
       "      <td>1650.000000</td>\n",
       "      <td>1100.000000</td>\n",
       "      <td>-1.0</td>\n",
       "      <td>3.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>6</td>\n",
       "      <td>11</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>2.0</td>\n",
       "      <td>2</td>\n",
       "      <td>4900</td>\n",
       "      <td>1633.333333</td>\n",
       "      <td>1633.333333</td>\n",
       "      <td>0.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>4</td>\n",
       "      <td>12</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 227 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "   bathrooms  bedrooms  price  price_bathrooms  price_bedrooms  room_diff  \\\n",
       "0        1.0         1   2950      1475.000000     1475.000000        0.0   \n",
       "1        1.0         2   2850      1425.000000      950.000000       -1.0   \n",
       "2        1.0         1   3758      1879.000000     1879.000000        0.0   \n",
       "3        1.0         2   3300      1650.000000     1100.000000       -1.0   \n",
       "4        2.0         2   4900      1633.333333     1633.333333        0.0   \n",
       "\n",
       "   room_num  Year  Month  Day  ...   virtual  walk  walls  war  washer  water  \\\n",
       "0       2.0  2016      6   11  ...         0     0      0    0       0      0   \n",
       "1       3.0  2016      6   24  ...         0     0      0    1       0      0   \n",
       "2       2.0  2016      6    3  ...         0     0      0    0       0      0   \n",
       "3       3.0  2016      6   11  ...         0     0      0    0       0      0   \n",
       "4       4.0  2016      4   12  ...         0     0      0    1       0      0   \n",
       "\n",
       "   wheelchair  wifi  windows  work  \n",
       "0           0     0        0     0  \n",
       "1           0     0        0     0  \n",
       "2           0     0        0     0  \n",
       "3           1     0        0     0  \n",
       "4           0     0        0     0  \n",
       "\n",
       "[5 rows x 227 columns]"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "target = pd.read_csv(dpath + 'RentListingInquries_FE_test.csv')\n",
    "target.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-01-03T08:33:50.069454Z",
     "start_time": "2018-01-03T08:33:49.877387Z"
    }
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/anaconda3/lib/python3.6/site-packages/pandas/core/indexing.py:517: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame.\n",
      "Try using .loc[row_indexer,col_indexer] = value instead\n",
      "\n",
      "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n",
      "  self.obj[item] = s\n"
     ]
    }
   ],
   "source": [
    "def remove_noise(df):\n",
    "#remove some noise\n",
    "    df= df[df.price < 10000]\n",
    "\n",
    "    df.loc[df[\"bathrooms\"] == 112, \"bathrooms\"] = 1.5\n",
    "    df.loc[df[\"bathrooms\"] == 10, \"bathrooms\"] = 1\n",
    "    df.loc[df[\"bathrooms\"] == 20, \"bathrooms\"] = 2\n",
    "    return df\n",
    "data = remove_noise(data)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 特征编码"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-01-03T08:33:50.651316Z",
     "start_time": "2018-01-03T08:33:50.585274Z"
    },
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "y_train = data['interest_level']\n",
    "X_train = data.drop('interest_level',axis=1)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 数据预处理"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-01-03T08:33:52.655112Z",
     "start_time": "2018-01-03T08:33:52.318789Z"
    },
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# 数据标准化 \n",
    "from sklearn.preprocessing import StandardScaler\n",
    "\n",
    "# 初始化特征的标准化器\n",
    "ss_X = StandardScaler()\n",
    "\n",
    "# 分别对训练和测试数据的特征进行标准化处理\n",
    "X_train = ss_X.fit_transform(X_train)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 模型训练"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-01-03T08:33:54.157916Z",
     "start_time": "2018-01-03T08:33:54.132529Z"
    },
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "kfold = StratifiedKFold(n_splits=5, shuffle=True, random_state=3)\n",
    "kfold = list(kfold.split(X_train,y_train))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-01-03T08:33:55.126076Z",
     "start_time": "2018-01-03T08:33:55.115329Z"
    },
    "run_control": {
     "marked": true
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'colsample_bytree': [0.6, 0.7, 0.8, 0.9],\n",
       " 'subsample': [0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9]}"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "subsample = [i/10.0 for i in range(3,10)]\n",
    "colsample_bytree = [i/10.0 for i in range(6,10)]\n",
    "param_test3_1 = dict(subsample=subsample, colsample_bytree=colsample_bytree)\n",
    "param_test3_1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-01-03T09:40:20.052766Z",
     "start_time": "2018-01-03T08:33:59.003433Z"
    }
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/anaconda3/lib/python3.6/site-packages/sklearn/model_selection/_search.py:761: DeprecationWarning: The grid_scores_ attribute was deprecated in version 0.18 in favor of the more elaborate cv_results_ attribute. The grid_scores_ attribute will not be available from 0.20\n",
      "  DeprecationWarning)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "([mean: -0.60015, std: 0.00483, params: {'colsample_bytree': 0.6, 'subsample': 0.3},\n",
       "  mean: -0.59681, std: 0.00481, params: {'colsample_bytree': 0.6, 'subsample': 0.4},\n",
       "  mean: -0.59528, std: 0.00487, params: {'colsample_bytree': 0.6, 'subsample': 0.5},\n",
       "  mean: -0.59328, std: 0.00502, params: {'colsample_bytree': 0.6, 'subsample': 0.6},\n",
       "  mean: -0.59280, std: 0.00505, params: {'colsample_bytree': 0.6, 'subsample': 0.7},\n",
       "  mean: -0.59258, std: 0.00474, params: {'colsample_bytree': 0.6, 'subsample': 0.8},\n",
       "  mean: -0.59147, std: 0.00483, params: {'colsample_bytree': 0.6, 'subsample': 0.9},\n",
       "  mean: -0.59937, std: 0.00523, params: {'colsample_bytree': 0.7, 'subsample': 0.3},\n",
       "  mean: -0.59626, std: 0.00567, params: {'colsample_bytree': 0.7, 'subsample': 0.4},\n",
       "  mean: -0.59568, std: 0.00503, params: {'colsample_bytree': 0.7, 'subsample': 0.5},\n",
       "  mean: -0.59414, std: 0.00531, params: {'colsample_bytree': 0.7, 'subsample': 0.6},\n",
       "  mean: -0.59315, std: 0.00443, params: {'colsample_bytree': 0.7, 'subsample': 0.7},\n",
       "  mean: -0.59196, std: 0.00472, params: {'colsample_bytree': 0.7, 'subsample': 0.8},\n",
       "  mean: -0.59199, std: 0.00470, params: {'colsample_bytree': 0.7, 'subsample': 0.9},\n",
       "  mean: -0.59982, std: 0.00628, params: {'colsample_bytree': 0.8, 'subsample': 0.3},\n",
       "  mean: -0.59694, std: 0.00558, params: {'colsample_bytree': 0.8, 'subsample': 0.4},\n",
       "  mean: -0.59434, std: 0.00454, params: {'colsample_bytree': 0.8, 'subsample': 0.5},\n",
       "  mean: -0.59355, std: 0.00577, params: {'colsample_bytree': 0.8, 'subsample': 0.6},\n",
       "  mean: -0.59289, std: 0.00470, params: {'colsample_bytree': 0.8, 'subsample': 0.7},\n",
       "  mean: -0.59270, std: 0.00480, params: {'colsample_bytree': 0.8, 'subsample': 0.8},\n",
       "  mean: -0.59206, std: 0.00495, params: {'colsample_bytree': 0.8, 'subsample': 0.9},\n",
       "  mean: -0.59933, std: 0.00512, params: {'colsample_bytree': 0.9, 'subsample': 0.3},\n",
       "  mean: -0.59730, std: 0.00512, params: {'colsample_bytree': 0.9, 'subsample': 0.4},\n",
       "  mean: -0.59525, std: 0.00504, params: {'colsample_bytree': 0.9, 'subsample': 0.5},\n",
       "  mean: -0.59308, std: 0.00469, params: {'colsample_bytree': 0.9, 'subsample': 0.6},\n",
       "  mean: -0.59266, std: 0.00553, params: {'colsample_bytree': 0.9, 'subsample': 0.7},\n",
       "  mean: -0.59221, std: 0.00464, params: {'colsample_bytree': 0.9, 'subsample': 0.8},\n",
       "  mean: -0.59190, std: 0.00510, params: {'colsample_bytree': 0.9, 'subsample': 0.9}],\n",
       " {'colsample_bytree': 0.6, 'subsample': 0.9},\n",
       " -0.5914725683515254)"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "xgb3_1 = XGBClassifier(\n",
    "        learning_rate =0.1,\n",
    "        n_estimators=247,  #第二轮参数调整得到的n_estimators最优值\n",
    "        max_depth=6,\n",
    "        min_child_weight=2,\n",
    "        gamma=0,\n",
    "        subsample=0.3,\n",
    "        colsample_bytree=0.8,\n",
    "        colsample_bylevel = 0.7,\n",
    "        objective= 'multi:softprob',\n",
    "        seed=3)\n",
    "\n",
    "\n",
    "gsearch3_1 = GridSearchCV(xgb3_1, param_grid = param_test3_1, scoring='neg_log_loss',n_jobs=-1, cv=kfold)\n",
    "gsearch3_1.fit(X_train , y_train)\n",
    "\n",
    "gsearch3_1.grid_scores_, gsearch3_1.best_params_,     gsearch3_1.best_score_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-01-03T09:40:20.602726Z",
     "start_time": "2018-01-03T09:40:20.572058Z"
    }
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('mean_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split0_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split1_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split2_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split3_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split4_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('std_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "{'mean_fit_time': array([ 152.37170076,  177.05439897,  189.5720614 ,  188.41855469,\n",
       "         180.96964474,  170.34221716,  164.61108389,  173.58622518,\n",
       "         200.2589426 ,  216.32709475,  219.6827806 ,  219.88090477,\n",
       "         205.30706768,  188.24976311,  197.55910215,  227.59649677,\n",
       "         245.17583079,  245.43984766,  234.53716636,  221.11386361,\n",
       "         212.42410431,  223.51674247,  256.59968481,  275.29510841,\n",
       "         270.8609468 ,  265.34430389,  256.07879386,  175.51092682]),\n",
       " 'mean_score_time': array([ 1.07563815,  0.81436963,  0.81063471,  0.79329085,  0.7818356 ,\n",
       "         0.77239356,  0.76783071,  0.76569786,  0.75754538,  0.79590917,\n",
       "         0.89449115,  0.80645847,  0.76587477,  0.79639697,  0.77651982,\n",
       "         0.75454206,  0.74713683,  0.76930122,  0.73811545,  0.75464921,\n",
       "         0.74111786,  0.78808498,  0.76608162,  0.73456702,  0.77186856,\n",
       "         0.80732918,  0.72606192,  0.55799885]),\n",
       " 'mean_test_score': array([-0.60015272, -0.59681401, -0.59528097, -0.59328303, -0.59280247,\n",
       "        -0.59257854, -0.59147257, -0.59937279, -0.59625769, -0.59568263,\n",
       "        -0.59414132, -0.59315213, -0.59195865, -0.59199263, -0.59982117,\n",
       "        -0.59694326, -0.59434083, -0.59355122, -0.59288596, -0.59269932,\n",
       "        -0.5920566 , -0.59932793, -0.59729931, -0.59525019, -0.59308261,\n",
       "        -0.59266425, -0.59221085, -0.59190332]),\n",
       " 'mean_train_score': array([-0.47945465, -0.47362761, -0.47002809, -0.46718205, -0.46618258,\n",
       "        -0.46784719, -0.47112573, -0.47527674, -0.46935147, -0.46564801,\n",
       "        -0.46378023, -0.46361587, -0.46471484, -0.46772978, -0.47156467,\n",
       "        -0.46546691, -0.4621109 , -0.45966506, -0.45943   , -0.4614239 ,\n",
       "        -0.46393721, -0.46844072, -0.46201753, -0.45780683, -0.45613117,\n",
       "        -0.45676877, -0.45749224, -0.46251353]),\n",
       " 'param_colsample_bytree': masked_array(data = [0.6 0.6 0.6 0.6 0.6 0.6 0.6 0.7 0.7 0.7 0.7 0.7 0.7 0.7 0.8 0.8 0.8 0.8\n",
       "  0.8 0.8 0.8 0.9 0.9 0.9 0.9 0.9 0.9 0.9],\n",
       "              mask = [False False False False False False False False False False False False\n",
       "  False False False False False False False False False False False False\n",
       "  False False False False],\n",
       "        fill_value = ?),\n",
       " 'param_subsample': masked_array(data = [0.3 0.4 0.5 0.6 0.7 0.8 0.9 0.3 0.4 0.5 0.6 0.7 0.8 0.9 0.3 0.4 0.5 0.6\n",
       "  0.7 0.8 0.9 0.3 0.4 0.5 0.6 0.7 0.8 0.9],\n",
       "              mask = [False False False False False False False False False False False False\n",
       "  False False False False False False False False False False False False\n",
       "  False False False False],\n",
       "        fill_value = ?),\n",
       " 'params': [{'colsample_bytree': 0.6, 'subsample': 0.3},\n",
       "  {'colsample_bytree': 0.6, 'subsample': 0.4},\n",
       "  {'colsample_bytree': 0.6, 'subsample': 0.5},\n",
       "  {'colsample_bytree': 0.6, 'subsample': 0.6},\n",
       "  {'colsample_bytree': 0.6, 'subsample': 0.7},\n",
       "  {'colsample_bytree': 0.6, 'subsample': 0.8},\n",
       "  {'colsample_bytree': 0.6, 'subsample': 0.9},\n",
       "  {'colsample_bytree': 0.7, 'subsample': 0.3},\n",
       "  {'colsample_bytree': 0.7, 'subsample': 0.4},\n",
       "  {'colsample_bytree': 0.7, 'subsample': 0.5},\n",
       "  {'colsample_bytree': 0.7, 'subsample': 0.6},\n",
       "  {'colsample_bytree': 0.7, 'subsample': 0.7},\n",
       "  {'colsample_bytree': 0.7, 'subsample': 0.8},\n",
       "  {'colsample_bytree': 0.7, 'subsample': 0.9},\n",
       "  {'colsample_bytree': 0.8, 'subsample': 0.3},\n",
       "  {'colsample_bytree': 0.8, 'subsample': 0.4},\n",
       "  {'colsample_bytree': 0.8, 'subsample': 0.5},\n",
       "  {'colsample_bytree': 0.8, 'subsample': 0.6},\n",
       "  {'colsample_bytree': 0.8, 'subsample': 0.7},\n",
       "  {'colsample_bytree': 0.8, 'subsample': 0.8},\n",
       "  {'colsample_bytree': 0.8, 'subsample': 0.9},\n",
       "  {'colsample_bytree': 0.9, 'subsample': 0.3},\n",
       "  {'colsample_bytree': 0.9, 'subsample': 0.4},\n",
       "  {'colsample_bytree': 0.9, 'subsample': 0.5},\n",
       "  {'colsample_bytree': 0.9, 'subsample': 0.6},\n",
       "  {'colsample_bytree': 0.9, 'subsample': 0.7},\n",
       "  {'colsample_bytree': 0.9, 'subsample': 0.8},\n",
       "  {'colsample_bytree': 0.9, 'subsample': 0.9}],\n",
       " 'rank_test_score': array([28, 22, 19, 14, 10,  7,  1, 26, 21, 20, 16, 13,  3,  4, 27, 23, 17,\n",
       "        15, 11,  9,  5, 25, 24, 18, 12,  8,  6,  2], dtype=int32),\n",
       " 'split0_test_score': array([-0.59184022, -0.58961064, -0.58759195, -0.58484123, -0.58561339,\n",
       "        -0.5856917 , -0.5843365 , -0.5915302 , -0.58846819, -0.58739883,\n",
       "        -0.58536205, -0.58716032, -0.58421701, -0.58492938, -0.58979677,\n",
       "        -0.58946416, -0.58796228, -0.58557192, -0.58670334, -0.58492439,\n",
       "        -0.5838358 , -0.59220446, -0.58928419, -0.58852866, -0.58576501,\n",
       "        -0.58411606, -0.58466359, -0.58365332]),\n",
       " 'split0_train_score': array([-0.48146324, -0.47630698, -0.47144946, -0.46813336, -0.46868915,\n",
       "        -0.46816962, -0.4729311 , -0.47675678, -0.47160782, -0.46813132,\n",
       "        -0.466005  , -0.46490815, -0.4695677 , -0.46820649, -0.47460513,\n",
       "        -0.46743121, -0.46360499, -0.46049773, -0.46148482, -0.46353009,\n",
       "        -0.46730675, -0.47134338, -0.46475247, -0.45997874, -0.45812615,\n",
       "        -0.46045507, -0.45804624, -0.46577484]),\n",
       " 'split1_test_score': array([-0.60661068, -0.60312408, -0.60196416, -0.59873204, -0.6006035 ,\n",
       "        -0.59952475, -0.59832323, -0.60621267, -0.60425424, -0.60206692,\n",
       "        -0.59976165, -0.5990145 , -0.59735821, -0.59878508, -0.60807985,\n",
       "        -0.60582971, -0.60134572, -0.60181938, -0.59966295, -0.59876163,\n",
       "        -0.5988981 , -0.60726261, -0.60432982, -0.60223706, -0.59982816,\n",
       "        -0.60046069, -0.59725159, -0.59855165]),\n",
       " 'split1_train_score': array([-0.4768826 , -0.47047284, -0.46865754, -0.46561326, -0.46275418,\n",
       "        -0.46551756, -0.47168452, -0.47368261, -0.46669006, -0.46285485,\n",
       "        -0.4612239 , -0.46169505, -0.46338591, -0.46662849, -0.46923439,\n",
       "        -0.46432056, -0.4601421 , -0.45634264, -0.45541199, -0.45898577,\n",
       "        -0.46157904, -0.46592716, -0.45948528, -0.4573953 , -0.45537327,\n",
       "        -0.45403524, -0.4548507 , -0.46111242]),\n",
       " 'split2_test_score': array([-0.60214074, -0.59964851, -0.59664538, -0.59662899, -0.59551177,\n",
       "        -0.59414685, -0.59440505, -0.6027073 , -0.59914928, -0.59923846,\n",
       "        -0.59829879, -0.59597496, -0.59502012, -0.59451955, -0.60258398,\n",
       "        -0.59821173, -0.59669475, -0.59729149, -0.59557699, -0.5956972 ,\n",
       "        -0.59442969, -0.60073779, -0.59937814, -0.59860443, -0.59561322,\n",
       "        -0.59463972, -0.59521799, -0.59523275]),\n",
       " 'split2_train_score': array([-0.47830501, -0.47234912, -0.46783478, -0.46478947, -0.46520913,\n",
       "        -0.4686438 , -0.47050208, -0.47535005, -0.46989708, -0.46440358,\n",
       "        -0.46377761, -0.46538722, -0.46322457, -0.46760987, -0.47204712,\n",
       "        -0.46446828, -0.46134868, -0.46071126, -0.4617831 , -0.46095274,\n",
       "        -0.46143854, -0.46607687, -0.46342119, -0.45787242, -0.45555018,\n",
       "        -0.45573275, -0.45721466, -0.4617009 ]),\n",
       " 'split3_test_score': array([-0.60104362, -0.59848359, -0.59764056, -0.59573858, -0.59215797,\n",
       "        -0.59431056, -0.5919726 , -0.60092225, -0.59810277, -0.59606753,\n",
       "        -0.5963503 , -0.59466827, -0.59413959, -0.59255435, -0.60249483,\n",
       "        -0.5984137 , -0.59417939, -0.5940271 , -0.59385142, -0.59410957,\n",
       "        -0.59254737, -0.60075431, -0.59926089, -0.59617948, -0.59328045,\n",
       "        -0.59473797, -0.59478503, -0.5926553 ]),\n",
       " 'split3_train_score': array([-0.47979222, -0.47515558, -0.47117987, -0.4682385 , -0.46732361,\n",
       "        -0.46600831, -0.46859784, -0.4748819 , -0.4688939 , -0.46656351,\n",
       "        -0.46355943, -0.46193413, -0.46303839, -0.467678  , -0.47056497,\n",
       "        -0.46490115, -0.46129386, -0.45911322, -0.45918336, -0.46205879,\n",
       "        -0.46331481, -0.47011017, -0.46226326, -0.45774405, -0.45457832,\n",
       "        -0.45602517, -0.45838002, -0.46086237]),\n",
       " 'split4_test_score': array([-0.59913027, -0.59320479, -0.59256449, -0.59047635, -0.59012712,\n",
       "        -0.58922025, -0.58832696, -0.59549326, -0.59131553, -0.5936433 ,\n",
       "        -0.59093596, -0.58894385, -0.58906014, -0.58917626, -0.59615267,\n",
       "        -0.59279841, -0.59152328, -0.58904784, -0.5886362"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/html": [
       "<b>limit_output extension: Maximum message size of 10000 exceeded with 12336 characters</b>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "gsearch3_1.cv_results_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-01-03T09:40:21.475505Z",
     "start_time": "2018-01-03T09:40:21.089110Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Best: -0.591473 using {'colsample_bytree': 0.6, 'subsample': 0.9}\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('mean_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('std_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split0_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split1_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split2_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split3_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split4_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAZIAAAEKCAYAAAA4t9PUAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4wLCBo\ndHRwOi8vbWF0cGxvdGxpYi5vcmcvpW3flQAAIABJREFUeJzs3Xd8zdcbwPHPyZCIESRGjIhozAx7\n1IytUa1RSmvVHq1RI6pGlaLUrFHbz6qGLquxtwraGEUjJJGIEYkYIWQ8vz9upEGWDBLO+/W6r7r3\nnu+553tLnnzPOd/nUSKCpmmapqWV0asegKZpmpa96UCiaZqmpYsOJJqmaVq66ECiaZqmpYsOJJqm\naVq66ECiaZqmpYsOJJqmaVq66ECiaZqmpYsOJJqmaVq6mLzqAbwM1tbWYmdn96qHoWmalq2cPHny\nlogUTKndGxFI7OzsOHHixKsehqZpWrailApITTs9taVpmqaliw4kmqZpWrroQKJpmqalyxuxRqJp\nWUFUVBRBQUFERka+6qFo2lPMzc0pXrw4pqamaTpeBxJNe0mCgoLIkycPdnZ2KKVe9XA0DQARITQ0\nlKCgIEqVKpWmPvTUlqa9JJGRkVhZWekgomUpSimsrKzSdaWsA4mmvUQ6iGhZUXr/XupAkoxd527w\no9eVVz0MTdO0LC1TA4lSqoVS6l+llK9Syj2JNh2UUueUUv8opdYleL2bUupi3KNbgterKqXOxPU5\nV2Xir3gbTgQy/vd/uBRyP7M+QtM0LdvLtECilDIG5gMtgQpAJ6VUhWfaOACjgToiUhEYEvd6AWA8\nUBOoAYxXSuWPO2wh0AdwiHu0yKxzmPy+I+amxozwOEVMrGTWx2jaSxMeHs6CBQvSdOzs2bN58OBB\nho1l5cqVDBo0KMP6S619+/bRqlWrFz7uRcfr7+/PunXrUm6YRmFhYTRt2hQHBweaNm3K7du3E213\n5coVmjVrRvny5alQoQL+/v4ZPpbMvCKpAfiKyGUReQz8CLz3TJvewHwRuQ0gIjfjXm8O7BSRsLj3\ndgItlFI2QF4ROSoiAvwPeD+zTqBQXnO+al2Rv66Es/yQX2Z9jKa9NFkpkLzukgsk0dHR6e5/6tSp\nNG7cmIsXL9K4cWOmTp2aaLuuXbsyYsQIzp8/j5eXF4UKFUr3Zz8rM7f/FgMCEzwPwnCFkVAZAKXU\nYcAYmCAifyRxbLG4R1Air2ea9yoVZeuZa8zY8S+NyheidMHcmflx2hviq83/cC74bob2WaFoXsa/\nWzHZNu7u7ly6dIlKlSrRtGlTChUqxE8//cSjR49o06YNX331FREREXTo0IGgoCBiYmIYO3YsN27c\nIDg4GFdXV6ytrdm7d2+i/f/xxx988cUXxMTEYG1tze7duwkLC+OTTz7h8uXLWFhYsHjxYpydnZ86\nzsPDg6+++gpjY2MsLS05cOAA/v7+dOnShYiICAC+//573n77bfbt28f48eMpXLgw3t7etG3bFicn\nJ+bMmcPDhw/59ddfKV26NN27d8fc3Jx//vmHGzduMHPmzOeuRCIiIvj00085c+YM0dHRTJgwgffe\ne/b33f8EBgbSokUL/Pz86Ny5M+PHj2fs2LFYW1szePBgAMaMGUPhwoVZt24d58+fp1KlSnTr1o38\n+fOzdetWIiMjiYiIYM+ePUyfPv257x9gzZo1zJ07l8ePH1OzZk0WLFiAsbHxU2P57bff2LdvHwDd\nunWjYcOGTJs27ak2586dIzo6mqZNmwKQO3fm/PzKzECS2NrFs/NDJhimpxoCxYGDSinHZI5NTZ+G\nD1eqD4YpMGxtbVM34sT7YXIbR5rNOsAIj1N49HsbYyO980bLnqZOncrZs2fx9vZmx44dbNy4ES8v\nL0SE1q1bc+DAAUJCQihatChbt24F4M6dO1haWjJz5kz27t2LtbV1on2HhITQu3dvDhw4QKlSpQgL\nCwNg/PjxVK5cmV9//ZU9e/bQtWtXvL29nzp24sSJeHp6UqxYMcLDwwEoVKgQO3fuxNzcnIsXL9Kp\nU6f45KunTp3i/PnzFChQAHt7e3r16oWXlxdz5sxh3rx5zJ49GzBcFezfv59Lly7h6uqKr6/vU587\nefJkGjVqxPLlywkPD6dGjRo0adKEXLlyJXqOXl5enD17FgsLC6pXr46bmxs9e/akbdu2DB48mNjY\nWH788Ue8vLxwdnZmxowZbNmyBTBMjR09epTTp09ToEABduzYwcWLF5/7/gsWLMiGDRs4fPgwpqam\nDBgwgLVr19K1a1d69epFv379qFatGjdu3MDGxgYAGxsbbt68+dx4fXx8yJcvH23btsXPz48mTZow\nderU54JSemVmIAkCSiR4XhwITqTNnyISBfgppf7FEFiCMASXhMfui3u9eAp9AiAii4HFANWqVUvX\n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\nyihru/j3lVKMqTWGC2EXcD/ozk/v/sSk951oNms/wz1Os6m/TjevJWO7O1w/k7F9FnGClokXN3pC\n1yN5s+qRJLRx40ZatmyJhYVFkm3STERe+0fVqlUlrW7NmSbnypaTgOaVJfrunefev3LnitReW1s6\nbO4gkdGR8pv3VSk5aoss2ueb5s/UXk/nzp3778m2USLL38nYx7ZRKY7Bz89PKlasKCIinp6e0rt3\nb4mNjZWYmBhxc3OT/fv3y8aNG6VXr17xx4SHh4uISMmSJSUkJCTJvm/evCnFixeXy5cvi4hIaGio\niIgMGjRIJkyYICIiu3fvFhcXFxERWbFihQwcOFBERBwdHSUoKEhERG7fvi0iIhEREfLw4UMREfHx\n8ZEn/4737t0rlpaWEhwcLJGRkVK0aFEZN26ciIjMnj1bBg8eLCIi3bp1k+bNm0tMTIz4+PhIsWLF\n5OHDh7J3715xc3MTEZHRo0fL6tWr4z/XwcFB7t+/n+j5rVixQooUKSK3bt2SBw8eSMWKFeX48ePi\n5+cnlStXFhGRmJgYsbe3l1u3bj31OU+OL1asWPz3ktT3f+7cOWnVqpU8fvxYRET69+8vq1atEhGR\nnj17yvHjx0VExNLS8qnx5cuXL8n/NyIirq6usnnz5iTff+rvZxzghKTiZ6y+IkmB1WcjMY65ybXF\nW7jS3o0S63/DJK6eAECJvCWYXHcyn+39jKleUxlXaxxbTwfz3U4fGpcvxFuF8rzC0WtZVgpXDi+D\nrkfy+tcjeeLatWucOXMmPjNxRtOBJBXyDZmO8T0frm7wIaBDO0qsXEOO4v9V+HW1daWXUy+WnlmK\nS0EXJr3fUk9xaVme6Hokr309kid++ukn2rRpg6mpabJ9ppVebE8NpcgzYhW2borokOsEdOpE5L8+\nTzUZWGkgNYvUZNKfkwiL8uer9xzxDgxnid7FpWUhuh7Jm1WP5In169fTqVOnZM8tPXQgSa2c+bEY\nsISSriHw6A4BXbrw4OTJ+LdNjEyYVn8aljksGbpvKA3K5aJFxSLM1Lu4tCwkYT2SnTt3xtcjcXJy\non379ty7d48zZ85Qo0YNKlWqxOTJk/nyyy+B/+qRuLq6Jtp3wnokLi4udOzYEYAJEyZw4sQJnJ2d\ncXd3T7IeiZOTE46OjtSvXz++HsmqVauoVasWPj4+6apH0rJlyyTrkURFReHs7IyjoyNjx45Ntr8n\n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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1094bb898>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# summarize results\n",
    "print(\"Best: %f using %s\" % (gsearch3_1.best_score_, gsearch3_1.best_params_))\n",
    "test_means = gsearch3_1.cv_results_[ 'mean_test_score' ]\n",
    "test_stds = gsearch3_1.cv_results_[ 'std_test_score' ]\n",
    "train_means = gsearch3_1.cv_results_[ 'mean_train_score' ]\n",
    "train_stds = gsearch3_1.cv_results_[ 'std_train_score' ]\n",
    "\n",
    "pd.DataFrame(gsearch3_1.cv_results_).to_csv('my_preds_subsampleh_colsample_bytree_1.csv')\n",
    "\n",
    "# plot results\n",
    "test_scores = np.array(test_means).reshape(len(colsample_bytree), len(subsample))\n",
    "train_scores = np.array(train_means).reshape(len(colsample_bytree), len(subsample))\n",
    "\n",
    "for i, value in enumerate(colsample_bytree):\n",
    "    pyplot.plot(subsample, -test_scores[i], label= 'test_colsample_bytree:'   + str(value))\n",
    "#for i, value in enumerate(min_child_weight):\n",
    "#    pyplot.plot(max_depth, train_scores[i], label= 'train_min_child_weight:'   + str(value))\n",
    "    \n",
    "pyplot.legend()\n",
    "pyplot.xlabel( 'subsample' )                                                                                                      \n",
    "pyplot.ylabel( '- Log Loss' )\n",
    "pyplot.savefig( 'subsample_vs_colsample_bytree1.png' )"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "当 colsample_bytree' = 0.6, 'subsample'= 0.9,logloss 的值 0.591473 比 默认参数 logloss 小"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "继续优化reg_alpha 和reg_lambda"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "hide_input": false,
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.3"
  },
  "latex_envs": {
   "LaTeX_envs_menu_present": true,
   "autocomplete": true,
   "bibliofile": "biblio.bib",
   "cite_by": "apalike",
   "current_citInitial": 1,
   "eqLabelWithNumbers": true,
   "eqNumInitial": 1,
   "hotkeys": {
    "equation": "Ctrl-E",
    "itemize": "Ctrl-I"
   },
   "labels_anchors": false,
   "latex_user_defs": false,
   "report_style_numbering": false,
   "user_envs_cfg": false
  },
  "nbTranslate": {
   "displayLangs": [
    "*"
   ],
   "hotkey": "alt-t",
   "langInMainMenu": true,
   "sourceLang": "en",
   "targetLang": "fr",
   "useGoogleTranslate": true
  },
  "toc": {
   "nav_menu": {},
   "number_sections": true,
   "sideBar": true,
   "skip_h1_title": false,
   "toc_cell": false,
   "toc_position": {},
   "toc_section_display": "block",
   "toc_window_display": false
  },
  "varInspector": {
   "cols": {
    "lenName": 16,
    "lenType": 16,
    "lenVar": 40
   },
   "kernels_config": {
    "python": {
     "delete_cmd_postfix": "",
     "delete_cmd_prefix": "del ",
     "library": "var_list.py",
     "varRefreshCmd": "print(var_dic_list())"
    },
    "r": {
     "delete_cmd_postfix": ") ",
     "delete_cmd_prefix": "rm(",
     "library": "var_list.r",
     "varRefreshCmd": "cat(var_dic_list()) "
    }
   },
   "types_to_exclude": [
    "module",
    "function",
    "builtin_function_or_method",
    "instance",
    "_Feature"
   ],
   "window_display": false
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
